<!DOCTYPE html>
<html>
<head>
    
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
    
            <meta name="viewport" content="width=device-width,
                initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
            <style>
                #map_59579f5990e794f4a46a9f96f2f61920 {
                    position: relative;
                    width: 100.0%;
                    height: 100.0%;
                    left: 0.0%;
                    top: 0.0%;
                }
                .leaflet-container { font-size: 1rem; }
            </style>

            <style>html, body {
                width: 100%;
                height: 100%;
                margin: 0;
                padding: 0;
            }
            </style>

            <style>#map {
                position:absolute;
                top:0;
                bottom:0;
                right:0;
                left:0;
                }
            </style>

            <script>
                L_NO_TOUCH = false;
                L_DISABLE_3D = false;
            </script>

        
    <script src="https://cdn.jsdelivr.net/gh/python-visualization/folium@main/folium/templates/leaflet_heat.min.js"></script>
</head>
<body>
    
    
            <div class="folium-map" id="map_59579f5990e794f4a46a9f96f2f61920" ></div>
        
</body>
<script>
    
    
            var map_59579f5990e794f4a46a9f96f2f61920 = L.map(
                "map_59579f5990e794f4a46a9f96f2f61920",
                {
                    center: [31.23, 121.47],
                    crs: L.CRS.EPSG3857,
                    ...{
  "zoom": 10,
  "zoomControl": true,
  "preferCanvas": false,
}

                }
            );

            

        
    
            var tile_layer_aad10dbc71776c0b44fa809b3af687ef = L.tileLayer(
                "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png",
                {
  "minZoom": 0,
  "maxZoom": 20,
  "maxNativeZoom": 20,
  "noWrap": false,
  "attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors \u0026copy; \u003ca href=\"https://carto.com/attributions\"\u003eCARTO\u003c/a\u003e",
  "subdomains": "abcd",
  "detectRetina": false,
  "tms": false,
  "opacity": 1,
}

            );
        
    
            tile_layer_aad10dbc71776c0b44fa809b3af687ef.addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
            var heat_map_e16b09cd3ad10f42178554daa6ac7de6 = L.heatLayer(
                [[31.22, 121.47, 150.0], [31.23, 121.48, 120.0], [31.19, 121.43, 95.0], [31.21, 121.42, 80.0], [31.23, 121.46, 110.0], [31.25, 121.39, 75.0], [31.27, 121.49, 65.0], [31.27, 121.52, 85.0], [31.11, 121.38, 90.0], [31.4, 121.48, 70.0], [31.38, 121.26, 60.0], [30.75, 121.34, 45.0], [31.0, 121.24, 55.0], [31.15, 121.12, 50.0], [30.92, 121.47, 40.0], [31.62, 121.4, 30.0]],
                {
  "minOpacity": 0.5,
  "maxZoom": 18,
  "radius": 25,
  "blur": 15,
  "gradient": {
  0.2: "lightblue",
  0.5: "purple",
  0.8: "darkblue",
},
}
            );
        
    
            heat_map_e16b09cd3ad10f42178554daa6ac7de6.addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
            var circle_marker_8d04b57fb62e1b2065397d0437b8bb74 = L.circleMarker(
                [31.22, 121.47],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 75.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_cc405274cab4a1a6d11af3eaa7547cf0 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_9eca67247a1925aa49f13c079a2fea38 = $(`<div id="html_9eca67247a1925aa49f13c079a2fea38" style="width: 100.0%; height: 100.0%;">浦东新区<br>文化设施: 150处</div>`)[0];
                popup_cc405274cab4a1a6d11af3eaa7547cf0.setContent(html_9eca67247a1925aa49f13c079a2fea38);
            
        

        circle_marker_8d04b57fb62e1b2065397d0437b8bb74.bindPopup(popup_cc405274cab4a1a6d11af3eaa7547cf0)
        ;

        
    
    
            var circle_marker_de652cbad8a9a2c6a8385f8a665087f4 = L.circleMarker(
                [31.23, 121.48],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 60.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_87c8953979d710bf35ee8267eaa22d39 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_a208c8333e653f72216b40eb03f1fe8b = $(`<div id="html_a208c8333e653f72216b40eb03f1fe8b" style="width: 100.0%; height: 100.0%;">黄浦区<br>文化设施: 120处</div>`)[0];
                popup_87c8953979d710bf35ee8267eaa22d39.setContent(html_a208c8333e653f72216b40eb03f1fe8b);
            
        

        circle_marker_de652cbad8a9a2c6a8385f8a665087f4.bindPopup(popup_87c8953979d710bf35ee8267eaa22d39)
        ;

        
    
    
            var circle_marker_f058ceba0e039c76fda5ee3a6a50f4df = L.circleMarker(
                [31.19, 121.43],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 47.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_6a0caa9f82a475672e1262c8fffb1518 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_89cbb86731ecbae7ea16619df9a3c7b4 = $(`<div id="html_89cbb86731ecbae7ea16619df9a3c7b4" style="width: 100.0%; height: 100.0%;">徐汇区<br>文化设施: 95处</div>`)[0];
                popup_6a0caa9f82a475672e1262c8fffb1518.setContent(html_89cbb86731ecbae7ea16619df9a3c7b4);
            
        

        circle_marker_f058ceba0e039c76fda5ee3a6a50f4df.bindPopup(popup_6a0caa9f82a475672e1262c8fffb1518)
        ;

        
    
    
            var circle_marker_9197b3421f2e6bb4b2aca2c1b6a4ec47 = L.circleMarker(
                [31.21, 121.42],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 40.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_ac0711d95cf9213f0a4a18e169d00f79 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_642712a8ac863152bf918eb3ad3c771e = $(`<div id="html_642712a8ac863152bf918eb3ad3c771e" style="width: 100.0%; height: 100.0%;">长宁区<br>文化设施: 80处</div>`)[0];
                popup_ac0711d95cf9213f0a4a18e169d00f79.setContent(html_642712a8ac863152bf918eb3ad3c771e);
            
        

        circle_marker_9197b3421f2e6bb4b2aca2c1b6a4ec47.bindPopup(popup_ac0711d95cf9213f0a4a18e169d00f79)
        ;

        
    
    
            var circle_marker_f5474084ed5c31906270d258c00f49dd = L.circleMarker(
                [31.23, 121.46],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 55.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_40885e07fd94bd09114649baa722656e = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_2439305ece94a1f16ca2b9a246d6e0ac = $(`<div id="html_2439305ece94a1f16ca2b9a246d6e0ac" style="width: 100.0%; height: 100.0%;">静安区<br>文化设施: 110处</div>`)[0];
                popup_40885e07fd94bd09114649baa722656e.setContent(html_2439305ece94a1f16ca2b9a246d6e0ac);
            
        

        circle_marker_f5474084ed5c31906270d258c00f49dd.bindPopup(popup_40885e07fd94bd09114649baa722656e)
        ;

        
    
    
            var circle_marker_e3c7c6051dce11ddf050cc8bd2916118 = L.circleMarker(
                [31.25, 121.39],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 37.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_aef653a4e4d30fee65b13ca52169c56d = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_e9e65cdb92a119b77254ee90582a07d1 = $(`<div id="html_e9e65cdb92a119b77254ee90582a07d1" style="width: 100.0%; height: 100.0%;">普陀区<br>文化设施: 75处</div>`)[0];
                popup_aef653a4e4d30fee65b13ca52169c56d.setContent(html_e9e65cdb92a119b77254ee90582a07d1);
            
        

        circle_marker_e3c7c6051dce11ddf050cc8bd2916118.bindPopup(popup_aef653a4e4d30fee65b13ca52169c56d)
        ;

        
    
    
            var circle_marker_862e1c3cbca4e342c6c6e721d0fce031 = L.circleMarker(
                [31.27, 121.49],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 32.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_2a5b75222211d71c9e63aacc359d486c = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_55758adc984a4cf7f40e6b26075cb485 = $(`<div id="html_55758adc984a4cf7f40e6b26075cb485" style="width: 100.0%; height: 100.0%;">虹口区<br>文化设施: 65处</div>`)[0];
                popup_2a5b75222211d71c9e63aacc359d486c.setContent(html_55758adc984a4cf7f40e6b26075cb485);
            
        

        circle_marker_862e1c3cbca4e342c6c6e721d0fce031.bindPopup(popup_2a5b75222211d71c9e63aacc359d486c)
        ;

        
    
    
            var circle_marker_86d5cf99d106cefe94930c44fa871d57 = L.circleMarker(
                [31.27, 121.52],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 42.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_7ae528c5ad6aae22e2fcedf68b81cf1c = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_5d3c38081e1b093cb9250431df31c7f2 = $(`<div id="html_5d3c38081e1b093cb9250431df31c7f2" style="width: 100.0%; height: 100.0%;">杨浦区<br>文化设施: 85处</div>`)[0];
                popup_7ae528c5ad6aae22e2fcedf68b81cf1c.setContent(html_5d3c38081e1b093cb9250431df31c7f2);
            
        

        circle_marker_86d5cf99d106cefe94930c44fa871d57.bindPopup(popup_7ae528c5ad6aae22e2fcedf68b81cf1c)
        ;

        
    
    
            var circle_marker_452e2529a007e16a53b74dfd4503e71f = L.circleMarker(
                [31.11, 121.38],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 45.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_b99886390d8e797130ae2cde901921ac = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_15e2df313e0d7c8d8017bc9f81ef5726 = $(`<div id="html_15e2df313e0d7c8d8017bc9f81ef5726" style="width: 100.0%; height: 100.0%;">闵行区<br>文化设施: 90处</div>`)[0];
                popup_b99886390d8e797130ae2cde901921ac.setContent(html_15e2df313e0d7c8d8017bc9f81ef5726);
            
        

        circle_marker_452e2529a007e16a53b74dfd4503e71f.bindPopup(popup_b99886390d8e797130ae2cde901921ac)
        ;

        
    
    
            var circle_marker_eb2ea218d8aa84ae4014154ad53eb76a = L.circleMarker(
                [31.4, 121.48],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 35.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_d83d7be23b460606f0d170a80c05495a = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_64862f5a48591a809e5d7850b80760ad = $(`<div id="html_64862f5a48591a809e5d7850b80760ad" style="width: 100.0%; height: 100.0%;">宝山区<br>文化设施: 70处</div>`)[0];
                popup_d83d7be23b460606f0d170a80c05495a.setContent(html_64862f5a48591a809e5d7850b80760ad);
            
        

        circle_marker_eb2ea218d8aa84ae4014154ad53eb76a.bindPopup(popup_d83d7be23b460606f0d170a80c05495a)
        ;

        
    
    
            var circle_marker_247720376840c4ee3ab468d5db73b2c8 = L.circleMarker(
                [31.38, 121.26],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 30.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_c192bf24f69cb14bec5690fa1bb7f8eb = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_30c3bcbb1522de226724949256893f2e = $(`<div id="html_30c3bcbb1522de226724949256893f2e" style="width: 100.0%; height: 100.0%;">嘉定区<br>文化设施: 60处</div>`)[0];
                popup_c192bf24f69cb14bec5690fa1bb7f8eb.setContent(html_30c3bcbb1522de226724949256893f2e);
            
        

        circle_marker_247720376840c4ee3ab468d5db73b2c8.bindPopup(popup_c192bf24f69cb14bec5690fa1bb7f8eb)
        ;

        
    
    
            var circle_marker_88c618cf97772ea781b245b96301b962 = L.circleMarker(
                [30.75, 121.34],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 22.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_527d3f12715120ed6cd45b92edf3fd09 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_02d9968308cb14ef6c46098d50d4c2c8 = $(`<div id="html_02d9968308cb14ef6c46098d50d4c2c8" style="width: 100.0%; height: 100.0%;">金山区<br>文化设施: 45处</div>`)[0];
                popup_527d3f12715120ed6cd45b92edf3fd09.setContent(html_02d9968308cb14ef6c46098d50d4c2c8);
            
        

        circle_marker_88c618cf97772ea781b245b96301b962.bindPopup(popup_527d3f12715120ed6cd45b92edf3fd09)
        ;

        
    
    
            var circle_marker_5576f78c0bb040106d6f8ff2d123839d = L.circleMarker(
                [31.0, 121.24],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 27.5, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_e89570b9a79e0f2377ec09ed2a904797 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_b6607f2de37b5c37d02a24ad754eaaee = $(`<div id="html_b6607f2de37b5c37d02a24ad754eaaee" style="width: 100.0%; height: 100.0%;">松江区<br>文化设施: 55处</div>`)[0];
                popup_e89570b9a79e0f2377ec09ed2a904797.setContent(html_b6607f2de37b5c37d02a24ad754eaaee);
            
        

        circle_marker_5576f78c0bb040106d6f8ff2d123839d.bindPopup(popup_e89570b9a79e0f2377ec09ed2a904797)
        ;

        
    
    
            var circle_marker_a7d077726fd7cb5529e4ae1f69de553f = L.circleMarker(
                [31.15, 121.12],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 25.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_63d40752e0ae0a3ae9e8e805831c2a98 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_c16b7826a4c28e7bcc7ed2a1e122f794 = $(`<div id="html_c16b7826a4c28e7bcc7ed2a1e122f794" style="width: 100.0%; height: 100.0%;">青浦区<br>文化设施: 50处</div>`)[0];
                popup_63d40752e0ae0a3ae9e8e805831c2a98.setContent(html_c16b7826a4c28e7bcc7ed2a1e122f794);
            
        

        circle_marker_a7d077726fd7cb5529e4ae1f69de553f.bindPopup(popup_63d40752e0ae0a3ae9e8e805831c2a98)
        ;

        
    
    
            var circle_marker_5d7049917c2b576dd6762e7f137ef8b5 = L.circleMarker(
                [30.92, 121.47],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 20.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_a3b38c450e4ad3c547ab26ad89919d57 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_673aa51ae712b0b774af3d2a2970edcf = $(`<div id="html_673aa51ae712b0b774af3d2a2970edcf" style="width: 100.0%; height: 100.0%;">奉贤区<br>文化设施: 40处</div>`)[0];
                popup_a3b38c450e4ad3c547ab26ad89919d57.setContent(html_673aa51ae712b0b774af3d2a2970edcf);
            
        

        circle_marker_5d7049917c2b576dd6762e7f137ef8b5.bindPopup(popup_a3b38c450e4ad3c547ab26ad89919d57)
        ;

        
    
    
            var circle_marker_2f5cdb81425420fef584920ccea9a9d5 = L.circleMarker(
                [31.62, 121.4],
                {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": true, "fillColor": "blue", "fillOpacity": 0.6, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "opacity": 1.0, "radius": 15.0, "stroke": true, "weight": 3}
            ).addTo(map_59579f5990e794f4a46a9f96f2f61920);
        
    
        var popup_8962147d1a4cadd0309e62f3d9793df0 = L.popup({
  "maxWidth": "100%",
});

        
            
                var html_9b4de9240613c4308477466de81fbc95 = $(`<div id="html_9b4de9240613c4308477466de81fbc95" style="width: 100.0%; height: 100.0%;">崇明区<br>文化设施: 30处</div>`)[0];
                popup_8962147d1a4cadd0309e62f3d9793df0.setContent(html_9b4de9240613c4308477466de81fbc95);
            
        

        circle_marker_2f5cdb81425420fef584920ccea9a9d5.bindPopup(popup_8962147d1a4cadd0309e62f3d9793df0)
        ;

        
    
</script>
</html>